﻿using System;
using System.Collections.Generic;
using System.Text;
using Business.Entities;
using System.Data;
using System.Data.SqlClient;

namespace Data.Database
{
    public class DocenteCursoAdapter:Adapter
    {
        int cargo;
        public List<DocenteCurso> GetAll(Persona docente)
        {
            List<DocenteCurso> docentecursos = new List<DocenteCurso>();
            try
            {
                this.OpenConnection();
                SqlCommand cmdDocenteCursos = new SqlCommand("select * from docentes_cursos", SqlConn);
                SqlDataReader drDocenteCursos = cmdDocenteCursos.ExecuteReader();
                int cargo;

                while (drDocenteCursos.Read())
                {
                    DocenteCurso doc = new DocenteCurso();
                    doc.ID = (int)drDocenteCursos["id_dictado"];
                    doc.Idcurso = (int)drDocenteCursos["id_curso"];
                    doc.Iddocente = (int)drDocenteCursos["id_docente"];
                    cargo = (int)drDocenteCursos["cargo"];
                    doc.Cargo.Car = this.tipocargo(cargo);
                    
                   
                    docentecursos.Add(doc);

                }
                drDocenteCursos.Close();
            }
            catch (Exception Ex)
            {
                Exception ExcepcionManejada =
                new Exception("Error al recuperar lista de DocenteCursos", Ex);
                throw ExcepcionManejada;
            }
            finally
            {
                this.CloseConnection();
            }

            return docentecursos;
        }

        public Business.Entities.DocenteCurso GetOne(int CursoID, int EntidadContactableID)
        {
            DocenteCurso doc = new DocenteCurso();
            
            try
            {
                this.OpenConnection();
                SqlCommand cmdDocenteCursos = new SqlCommand("select  * from docentes_cursos where id_dictado = @id", SqlConn);
                cmdDocenteCursos.Parameters.Add("@id", SqlDbType.Int).Value = EntidadContactableID;
                SqlDataReader drDocenteCursos = cmdDocenteCursos.ExecuteReader();
                if (drDocenteCursos.Read())
                {
                    doc.ID = (int)drDocenteCursos["id_dictado"];
                    doc.Idcurso = (int)drDocenteCursos["id_curso"];
                    doc.Iddocente = (int)drDocenteCursos["id_docente"];
                    cargo = (int)drDocenteCursos["cargo"];
                    doc.Cargo.Car = this.tipocargo(cargo);
                   
                    

                }
                drDocenteCursos.Close();


            }
            catch (Exception Ex)
            {
                Exception ExcepcionManejada =
                new Exception("Error al recuperar datos de los docentesCursos", Ex);
                throw ExcepcionManejada;
            }
            finally
            {
                this.CloseConnection();
            }

            return doc;
        }


        public void Delete(int ID)
        {

            try
            {
                this.OpenConnection();
                SqlCommand cmdDelete = new SqlCommand("delete from docentes_cursos where id_dictado=@id", SqlConn);
                cmdDelete.Parameters.Add("@id", SqlDbType.Int).Value = ID;
                cmdDelete.ExecuteNonQuery();
            }

            catch (Exception Ex)
            {
                Exception ExcepcionManejada = new Exception("Error al eliminar DocenteCurso", Ex);
                throw ExcepcionManejada;

            }

            finally
            {
                this.CloseConnection();
            }


        }


        protected void Update(DocenteCurso doc)
        {
            DocenteCurso dc = new DocenteCurso();
            dc = doc;
            int tipoc;
            try
            {
                this.OpenConnection();
                tipoc = this.dameInttipocarg(dc);
                SqlCommand cmdSave = new SqlCommand(
                "UPDATE docentes_cursos set id_curso=@id_curso, id_docente=@id_docente, cargo=@cargo WHERE id_dictado=@id", SqlConn);
                cmdSave.Parameters.Add("@id", SqlDbType.Int).Value = doc.ID;
                cmdSave.Parameters.Add("@id_curso", SqlDbType.Int).Value = doc.Idcurso;
                cmdSave.Parameters.Add("@id_docente", SqlDbType.Int).Value = doc.Iddocente;
                cmdSave.Parameters.Add("@cargo", SqlDbType.Int).Value = tipoc;
                
                cmdSave.ExecuteNonQuery();
            }

            catch (Exception Ex)
            {
                Exception ExcepcionManejada = new Exception("Error al modificar datos de DocenteCurso", Ex);
                throw ExcepcionManejada;
            }
            finally
            {
                this.CloseConnection();
            }

        }


        protected void Insert(DocenteCurso doc)
        {
            DocenteCurso dc = new DocenteCurso();
            dc = doc;
            int tipoc;
            try
            {
                this.OpenConnection();
                tipoc = this.dameInttipocarg(dc);
                SqlCommand cmdSave = new SqlCommand(
                "insert into docentes_cursos(id_curso, id_docente, cargo) " +
                "values(@id_curso, @id_docente, @cargo) " +
                "select @@identity", SqlConn);

                cmdSave.Parameters.Add("@id_curso", SqlDbType.Int).Value = doc.Idcurso;
                cmdSave.Parameters.Add("@id_docente", SqlDbType.Int).Value = doc.Iddocente;
                cmdSave.Parameters.Add("@cargo", SqlDbType.Int).Value = tipoc;
                doc.ID = Decimal.ToInt32((decimal)cmdSave.ExecuteScalar());
            }

            catch (Exception Ex)
            {
                Exception ExcepcionManejada = new Exception("Error al crear DocenteCargo", Ex);
                throw ExcepcionManejada;
            }
            finally
            {
                this.CloseConnection();
            }

        }





        public void Save(DocenteCurso doc)
        {
            if (doc.State == BussinessEntity.States.Deleted)
            {
                this.Delete(doc.ID);
            }
            else if (doc.State == BussinessEntity.States.New)
            {
                this.Insert(doc);
            }
            else if (doc.State == BussinessEntity.States.Modified)
            {
                this.Update(doc);
            }
            doc.State = BussinessEntity.States.Unmodified;

        }

        private TiposCargos.Cargo tipocargo(int tipocargo)
        {
            if (tipocargo == 0)
            {
                return TiposCargos.Cargo.Docente;
            }
            else
            {
                return TiposCargos.Cargo.JefeDeCatedra;
            }
        }
        private int dameInttipocarg(DocenteCurso doc)
        {
            if (doc.Cargo.Car == TiposCargos.Cargo.Docente)
            {
                return 0;
            }
            else
            {
                return 1;
            }

        }
    }
}
